<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    function func1() {
        var value = 1;
        var that = this;
        return{
            getValue: function () {
                return that.value;
            },
            setValue: function (value) {
                that.value = value;
            }
        }
    }

    var var1 = func1();
    var var2 = func1();
    var1.setValue(2);
    alert(var1.getValue());//2
    alert(var2.getValue());//2，
    /*
     所以当第一次调用func1返回对象给var1时，由于具有get跟set方法的对象已经被var1这个全局变量引用而放到了全局上下文，
     func1的内部变量value已经被return的get跟set方法带到了全局上下文环境中，形成了闭包，func1执行完毕并不会释放value变量的内存
     所以我们通过var1对象调用set方法后，var2对象get方法得到的值也是2
      */
</script>
</body>
</html>